import apiClient from '@/lib/interceptor';


/**
 * 入职办理状态枚举
 */
export enum OnboardingStatus {
  Pending = 0,    // 未办理
  Completed = 1,  // 已办理
  Absent = 2      // 未到
}

/**
 * Offer接受状态枚举
 */
export enum OfferAcceptStatus {
  Accept = 1,  // 接受
  Reject = 2   // 拒绝
}

/**
 * Offer审批状态枚举
 */
export enum OfferApprovalStatus {
  Pending = 0,   // 未审批
  Approved = 1,  // 通过
  Rejected = 2   // 不通过
}

/**
 * 入职办理信息接口
 */
export interface OnboardingInfo {
  id: number;               // 主键id
  offerId: number;          // offer id
  intervieweeId: number;    // 应聘者id
  intervieweeName: string;  // 应聘者姓名
  deptId: string;          // 部门编号
  deptName: string;        // 部门名称
  positionNumber: string;   // 岗位编号
  positionName: string;    // 岗位名称
  onboardingTime: string;  // 入职办理时间
  onboardingPlace: string; // 入职办理地点
  status: OnboardingStatus; // 办理状态
  updateTime: string;      // 更新时间
  updateBy: string;        // 更新人
  tryoutStartTime?: string;
  tryoutEndTime?: string;
  tryoutDuration?: string;
}

/**
 * 查询参数接口
 */
export interface OnboardingQueryParams {
  page?: number;           // 当前页
  pageSize?: number;       // 页面大小
  onboardingTime?: string; // 入职办理时间
  onboardingPlace?: string;// 入职办理地点
  status?: OnboardingStatus;// 办理状态
}

/**
 * 入职办理请求参数接口
 */
export interface OnboardingUpdateParams {
  ids: number[];           // 待办理入职信息的主键id数组
  tryoutStartTime: string; // 试用期开始时间
  tryoutEndTime: string;   // 试用期结束时间
  tryoutDuration: string;  // 试用期时长
  status: OnboardingStatus;// 办理状态
}

/**
 * 入职办理结果接口
 */
export interface OnboardingResult {
  intervieweeId: number;    // 应聘者id
  intervieweeName: string;  // 应聘者姓名
  deptName: string;        // 应聘部门名称
  positionName: string;    // 应聘岗位名称
  employeeId: string;      // 对应的员工工号
  password: string;        // 密码
}

/**
 * Offer结果查询参数接口
 */
export interface OfferResultQueryParams {
  page?: number;           // 当前页
  pageSize?: number;       // 页面大小
  startTime?: string;      // 发送offer开始时间
  endTime?: string;        // 发送offer结束时间
  result?: OfferAcceptStatus; // 接受结果
}

/**
 * Offer结果信息接口
 */
export interface OfferResultInfo {
  id: number;               // 主键id
  intervieweeId: number;    // 应聘者id
  intervieweeName: string;  // 应聘者姓名
  sendTime: string;        // 发送时间
  expiryTime: string;      // 过期时间
  result: OfferAcceptStatus; // 接受结果
}

/**
 * Offer申请查询参数接口
 */
export interface OfferApprovalQueryParams {
  page?: number;                 // 当前页码
  pageSize?: number;            // 页面大小
  status?: OfferApprovalStatus; // 审批状态
}

/**
 * Offer申请记录信息接口
 */
export interface OfferApprovalInfo {
  id: number;
  intervieweeId: number;
  intervieweeName: string;
  instructions: string;
  applicantId: string;
  approverId: string | null;
  status: OfferApprovalStatus;
  createTime: string;
  updateTime: string;
  sendTime: string | null;
  offerToken: string | null;
  expiryTime: string | null;
  result: number;
}

/**
 * Offer审批参数接口
 */
export interface OfferApprovalParams {
  id: number;                // 主键id
  status: OfferApprovalStatus; // 审批状态
  content?: string;         // 邮件内容
  offerFile?: File;         // offer附件
  onboardingTime?: string;  // 办理入职时间
  onboardingPlace?: string; // 办理入职地点
  expiryTime?: string;      // token过期时间
}

/**
 * 获取待办理入职信息
 * @description 获取待办理的入职信息列表，支持分页和条件筛选
 * 
 * @param params - 查询参数
 * @returns Promise<{ code: number; msg: string; data: { total: number; row: OnboardingInfo[] } }>
 * 
 * @example
 * ```typescript
 * // 获取所有待办理入职信息
 * const response = await getOnboardingList({
 *   page: 1,
 *   pageSize: 10
 * });
 * 
 * // 按条件筛选
 * const response = await getOnboardingList({
 *   page: 1,
 *   pageSize: 10,
 *   onboardingTime: '2025-02-25T09:00:00',
 *   onboardingPlace: '崇义楼',
 *   status: OnboardingStatus.Pending
 * });
 * 
 * if (response.code === 1) {
 *   const { total, row } = response.data;
 *   console.log(`共 ${total} 条记录`);
 *   console.log('入职信息列表:', row);
 * }
 * ```
 */
export const getOnboardingList = async (params: OnboardingQueryParams) => {
  try {
    // 构建查询参数
    const queryParams = new URLSearchParams();
    if (params.page) queryParams.append('page', params.page.toString());
    if (params.pageSize) queryParams.append('pageSize', params.pageSize.toString());
    if (params.onboardingTime) queryParams.append('onboardingTime', params.onboardingTime);
    if (params.onboardingPlace) queryParams.append('onboardingPlace', params.onboardingPlace);
    if (params.status !== undefined) queryParams.append('status', params.status.toString());

    // 打印请求参数
    console.log('获取入职信息请求参数:', {
      原始参数: params,
      查询字符串: queryParams.toString()
    });

    // 发送请求
    const response = await apiClient.get(`/onboarding?${queryParams.toString()}`);

    // 打印响应数据
    console.log('获取入职信息响应:', {
      请求参数: params,
      响应数据: response.data
    });

    return response.data;
  } catch (error) {
    console.error('获取入职信息失败:', error);
    throw error;
  }
};

/**
 * 修改办理入职状态
 * @description 批量修改入职办理状态，并返回办理成功的员工账号信息
 * 
 * @param params - 入职办理参数
 * @returns Promise<{ code: number; msg: string; data: OnboardingResult[] }>
 * 
 * @example
 * ```typescript
 * const response = await updateOnboardingStatus({
 *   ids: [68, 49, 29],
 *   tryoutStartTime: '2024-03-01',
 *   tryoutEndTime: '2024-09-01',
 *   tryoutDuration: '6个月',
 *   status: OnboardingStatus.Completed
 * });
 * 
 * if (response.code === 1) {
 *   console.log('入职办理成功');
 *   response.data.forEach(item => {
 *     console.log(`员工 ${item.intervieweeName} 的工号为: ${item.employeeId}`);
 *   });
 * }
 * ```
 */
export const updateOnboardingStatus = async (params: OnboardingUpdateParams) => {
  try {
    // 打印请求参数
    console.log('修改入职状态请求参数:', {
      入职信息ID: params.ids,
      试用期开始: params.tryoutStartTime,
      试用期结束: params.tryoutEndTime,
      试用期时长: params.tryoutDuration,
      办理状态: params.status
    });

    // 发送请求
    const response = await apiClient.put('/onboarding', params);

    // 打印响应数据
    console.log('修改入职状态响应:', {
      请求参数: params,
      响应数据: response.data
    });

    return response.data;
  } catch (error) {
    console.error('修改入职状态失败:', error);
    throw error;
  }
};

/**
 * 上传 Offer 接受结果
 * @param offerToken offer令牌
 * @param result 接受结果（1-接受，2-拒绝）
 * @returns Promise<{ code: number; msg: string; data: any }>
 */
export const uploadOfferResult = async (offerToken: string, result: number) => {
  try {
    // 构建请求参数
    const params = new URLSearchParams();
    params.append('offerToken', offerToken);
    params.append('result', result.toString());

    // 打印请求参数
    console.log('上传offer结果请求参数:', {
      'offer令牌': offerToken,
      '接受结果': result
    });

    // 发送请求，设置正确的 Content-Type
    const response = await apiClient.post('/interview/interviewee/offer/result', params, {
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    });

    // 打印响应数据
    console.log('上传offer结果响应:', response.data);

    return response.data;
  } catch (error) {
    console.error('上传offer结果失败:', error);
    throw error;
  }
};

/**
 * 获取offer接受结果
 * @description 获取offer接受结果列表，支持分页和条件筛选
 * 
 * @param params - 查询参数
 * @returns Promise<{ code: number; msg: string; data: { total: number; row: OfferResultInfo[] } }>
 * 
 * @example
 * ```typescript
 * // 获取所有offer结果
 * const response = await getOfferResults({
 *   page: 1,
 *   pageSize: 10
 * });
 * 
 * // 按条件筛选
 * const response = await getOfferResults({
 *   page: 1,
 *   pageSize: 10,
 *   startTime: '2025-03-10T00:00:00',
 *   endTime: '2025-03-11T00:00:00',
 *   result: OfferAcceptStatus.Accept
 * });
 * 
 * if (response.code === 1) {
 *   const { total, row } = response.data;
 *   console.log(`共 ${total} 条记录`);
 *   console.log('offer结果列表:', row);
 * }
 * ```
 */
export const getOfferResults = async (params: OfferResultQueryParams) => {
  try {
    // 构建查询参数
    const queryParams = new URLSearchParams();
    if (params.page) queryParams.append('page', params.page.toString());
    if (params.pageSize) queryParams.append('pageSize', params.pageSize.toString());
    if (params.startTime) queryParams.append('startTime', params.startTime);
    if (params.endTime) queryParams.append('endTime', params.endTime);
    if (params.result !== undefined) queryParams.append('result', params.result.toString());

    // 打印请求参数
    console.log('获取offer结果请求参数:', {
      原始参数: params,
      查询字符串: queryParams.toString()
    });

    // 发送请求
    const response = await apiClient.get(`/interview/interviewee/offer/result/get?${queryParams.toString()}`);

    // 打印响应数据
    console.log('获取offer结果响应:', {
      请求参数: params,
      响应数据: response.data
    });

    return response.data;
  } catch (error) {
    console.error('获取offer结果失败:', error);
    throw error;
  }
};

/**
 * 获取申请发offer记录
 */
export const getOfferApprovalList = async (params: OfferApprovalQueryParams) => {
  try {
    // 构建查询参数
    const queryParams = new URLSearchParams();
    if (params.page) queryParams.append('page', params.page.toString());
    if (params.pageSize) queryParams.append('pageSize', params.pageSize.toString());
    if (params.status !== undefined) queryParams.append('status', params.status.toString());

    // 打印请求参数
    console.log('获取offer申请记录请求参数:', {
      原始参数: params,
      查询字符串: queryParams.toString()
    });

    // 发送请求
    const response = await apiClient.get(`/approval/offer?${queryParams.toString()}`);

    // 打印响应数据
    console.log('获取offer申请记录响应:', {
      请求参数: params,
      响应数据: response.data
    });

    return response.data;
  } catch (error) {
    console.error('获取offer申请记录失败:', error);
    throw error;
  }
};

/**
 * 审批发offer
 */
export const approveOffer = async (params: OfferApprovalParams) => {
  try {
    // 构建表单数据
    const formData = new FormData();
    
    // 添加必需参数
    formData.append('id', params.id.toString());
    formData.append('status', params.status.toString());
    
    // 可选参数
    if (params.content) formData.append('content', params.content);
    if (params.offerFile) formData.append('offerFile', params.offerFile);
    if (params.onboardingTime) formData.append('onboardingTime', params.onboardingTime);
    if (params.onboardingPlace) formData.append('onboardingPlace', params.onboardingPlace);
    if (params.expiryTime) formData.append('expiryTime', params.expiryTime);

    // 打印请求参数
    console.log('审批offer请求参数:', {
      申请ID: params.id,
      审批状态: params.status === OfferApprovalStatus.Approved ? '通过' : '不通过',
      入职时间: params.onboardingTime,
      入职地点: params.onboardingPlace,
      过期时间: params.expiryTime,
      是否有附件: !!params.offerFile,
      表单数据: Object.fromEntries(formData.entries()) // 打印表单数据内容
    });

    // 发送请求，使用 URLSearchParams 添加查询参数
    const queryParams = new URLSearchParams();
    queryParams.append('id', params.id.toString());
    queryParams.append('status', params.status.toString());

    // 直接发送 FormData，不需要额外设置 Content-Type，axios 会自动设置
    const response = await apiClient.patch(`/approval/offer?${queryParams.toString()}`, formData);

    // 打印响应数据
    console.log('审批offer响应:', {
      请求参数: params,
      响应数据: response.data
    });

    return response.data;
  } catch (error) {
    console.error('审批offer失败:', error);
    throw error;
  }
}; 